// #include "toast.h"

// #include <QApplication>
// #include <QScreen>
// #include <QVBoxLayout>
// #include <QLabel>
// #include <QTimer>

// Toast::Toast(const QString &text)
// {
//     // 1. 设置窗口的基本参数
//     this->setFixedSize(800, 150);
//     this->setWindowTitle("消息通知");
//     this->setWindowIcon(QIcon(":/resource/image/logo.png"));
//     this->setAttribute(Qt::WA_DeleteOnClose);
//     this->setStyleSheet("QDialog { background-color: rgb(255, 255, 255); }");
//     // 去掉窗口的标题栏
//     this->setWindowFlags(Qt::FramelessWindowHint);

//     // 2. 先考虑一下窗口的位置.
//     // 获取到整个屏幕的尺寸, 通过 primaryScreen 来获取.
//     QScreen* screen = QApplication::primaryScreen();//主显示器
//     int width = screen->size().width();
//     int height = screen->size().height();
//     int x = (width - this->width()) / 2;
//     int y = height - this->height() - 100;	// 此处的 100 是窗口底边距离屏幕底边的间隔
//     this->move(x, y);

//     // 3. 添加一个布局管理器
//     QVBoxLayout* layout = new QVBoxLayout();
//     layout->setSpacing(0);
//     layout->setContentsMargins(0, 0, 0, 0);
//     this->setLayout(layout);

//     // 4. 创建显示文本的 Label
//     QLabel* label = new QLabel();
//     label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
//     label->setAlignment(Qt::AlignCenter);
//     label->setStyleSheet("QLabel { font-size: 32px; }");
//     label->setText(text);
//     layout->addWidget(label);

//     // 5. 实现 2s 之后自动关闭.
//     QTimer* timer = new QTimer(this);
//     connect(timer, &QTimer::timeout, this, [=]() {
//         timer->stop();
//         // 核心代码, 关闭当前窗口
//         this->close();
//     });
//     timer->start(2000);
// }

// void Toast::showMessage(const QString &text)
// {
//     Toast* toast = new Toast(text);
//     toast->show();
// }




//以下from deepseek R1
#include "toast.h"
#include <QApplication>
#include <QScreen>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QTimer>
#include <QGraphicsDropShadowEffect>
#include <QPropertyAnimation>
#include <QPainter>

Toast::Toast(const QString &text)
{
    // 基础设置
    setAttribute(Qt::WA_DeleteOnClose);
    setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::ToolTip);
    setAttribute(Qt::WA_TranslucentBackground);
    setFixedSize(380, 100);

    // 阴影效果
    auto *shadow = new QGraphicsDropShadowEffect(this);
    shadow->setBlurRadius(20);
    shadow->setColor(QColor(0, 0, 0, 60));
    shadow->setOffset(0, 4);
    setGraphicsEffect(shadow);

    // 主容器
    QWidget *container = new QWidget(this);
    container->setStyleSheet(R"(
        QWidget {
            background: qlineargradient(x1:0, y1:0, x2:1, y2:1,
                stop:0 #FFFFFF, stop:1 #F5F7FA);
            border-radius: 12px;
            border: 1px solid rgba(200, 200, 200, 120);
        }
    )");

    // 布局
    QHBoxLayout *mainLayout = new QHBoxLayout(container);
    mainLayout->setContentsMargins(20, 15, 20, 15);
    mainLayout->setSpacing(15);

    // 设置拉伸因子，让文本部分占据更多空间
    mainLayout->setStretch(0, 0); // 图标部分不拉伸
    mainLayout->setStretch(1, 1); // 文本部分拉伸占据空间

    // 图标
    QLabel *icon = new QLabel;
    icon->setPixmap(QIcon(":/resource/image/defaultUser.png").pixmap(40, 40));
    icon->setAlignment(Qt::AlignCenter);
    // 设置尺寸策略，让图标尽量保持原始比例
    QSizePolicy iconSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
    iconSizePolicy.setHorizontalStretch(0);
    iconSizePolicy.setVerticalStretch(0);
    iconSizePolicy.setHeightForWidth(icon->sizePolicy().hasHeightForWidth());
    icon->setSizePolicy(iconSizePolicy);
    mainLayout->addWidget(icon);

    // 文本
    QLabel *label = new QLabel(text);
    label->setStyleSheet(R"(
        QLabel {
            font-family: "Microsoft Yahei";
            font-size: 14px;
            color: #2D3748;
            line-height: 1.5;
            padding-left: 10px!important;
        }
    )");
    label->setWordWrap(true);
    // 设置尺寸策略，让文本能更好地拉伸占据空间
    QSizePolicy labelSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    labelSizePolicy.setHorizontalStretch(1);
    labelSizePolicy.setVerticalStretch(1);
    labelSizePolicy.setHeightForWidth(label->sizePolicy().hasHeightForWidth());
    label->setSizePolicy(labelSizePolicy);
    mainLayout->addWidget(label);

    // 容器布局
    QVBoxLayout *windowLayout = new QVBoxLayout(this);
    windowLayout->addWidget(container);
    windowLayout->setContentsMargins(10, 10, 10, 10);

    // 初始位置（屏幕右下角）
    QScreen *screen = QApplication::primaryScreen();
    QRect screenGeometry = screen->availableGeometry();
    move(screenGeometry.width() - width() - 30,
         screenGeometry.height() - height() - 30);

    // 动画效果
    QGraphicsOpacityEffect *opacityEffect = new QGraphicsOpacityEffect(this);
    setGraphicsEffect(opacityEffect);

    QPropertyAnimation *showAnim = new QPropertyAnimation(opacityEffect, "opacity");
    showAnim->setDuration(300);
    showAnim->setStartValue(0.0);
    showAnim->setEndValue(1.0);
    showAnim->setEasingCurve(QEasingCurve::OutQuad);

    QTimer::singleShot(5000, this, [=]() {
        QPropertyAnimation *closeAnim = new QPropertyAnimation(opacityEffect, "opacity");
        closeAnim->setDuration(300);
        closeAnim->setStartValue(1.0);
        closeAnim->setEndValue(0.0);
        closeAnim->setEasingCurve(QEasingCurve::InQuad);

        connect(closeAnim, &QPropertyAnimation::finished, this, &QWidget::close);
        closeAnim->start();
    });

    showAnim->start();
}

void Toast::showMessage(const QString &text)
{
    Toast *toast = new Toast(text);
    toast->show();
}
























